package com.qiniu.shortvideo.play;

import android.content.Context;

import com.pili.pldroid.player.AVOptions;
import com.qiniu.pili.droid.shortvideo.PLShortVideoUploader;
import com.qiniu.pili.droid.shortvideo.PLUploadSetting;

/**
 * 短视频播放管理类
 * Created by Su on 2017/11/9.
 */
public class PLPlayMgr {
    private volatile static PLPlayMgr instance = null;

    public static PLPlayMgr getInstance() {
        if (instance == null) {
            synchronized (PLPlayMgr.class) {
                if (instance == null)
                    instance = new PLPlayMgr();
            }
        }
        return instance;
    }

    // =================================== 短视频播放 ======================================
    private AVOptions options;                      // 用来配置播放参数

    public AVOptions getOptions() {
        if (options == null) {
            options = new AVOptions();
            // 解码方式:
            // codec＝AVOptions.MEDIA_CODEC_HW_DECODE，硬解
            // codec=AVOptions.MEDIA_CODEC_SW_DECODE, 软解
            // codec=AVOptions.MEDIA_CODEC_AUTO, 硬解优先，失败后自动切换到软解
            // 默认值是：MEDIA_CODEC_SW_DECODE
            options.setInteger(AVOptions.KEY_MEDIACODEC, AVOptions.MEDIA_CODEC_AUTO);

            // 开启解码后的视频数据回调, 默认值是：0
            // options.setInteger(AVOptions.KEY_VIDEO_DATA_CALLBACK, 1);

            // 开启解码后的音频数据回调, 默认值是：0
            // options.setInteger(AVOptions.KEY_AUDIO_DATA_CALLBACK, 1);

            // 开启自定义视频数据渲染, 默认值是：0，由 SDK 内部渲染视频
            // 1: 关闭SDK内部渲染
            // options.setInteger(AVOptions.KEY_VIDEO_RENDER_EXTERNAL, 1);

            // 开启自定义音频数据播放，默认值是：0，由 SDK 内部播放音频
            // 1： 关闭SDK内部音频播放
            // options.setInteger(AVOptions.KEY_AUDIO_RENDER_EXTERNAL, 1);

            // 准备超时时间，包括创建资源、建立连接、请求码流等，单位是 ms
            // 默认值是：无
            //options.setInteger(AVOptions.KEY_PREPARE_TIMEOUT, 10 * 1000);
            // 默认的缓存大小，单位是 ms
            // 默认值是：500
            //options.setInteger(AVOptions.KEY_CACHE_BUFFER_DURATION, 500);
            // 最大的缓存大小，单位是 ms
            // 默认值是：2000
            //options.setInteger(AVOptions.KEY_MAX_CACHE_BUFFER_DURATION, 4000);
            // 设置 DRM 密钥
//        byte[] key = {xxx, xxx, xxx, xxx, xxx ……};
//        options.setByteArray(AVOptions.KEY_DRM_KEY, key);
//        public final static int PREFER_FORMAT_M3U8 = 1;
//        public final static int PREFER_FORMAT_MP4 = 2;
//        public final static int PREFER_FORMAT_FLV = 3;
// 设置偏好的视频格式，设置后会加快对应格式视频流的加载速度，但播放其他格式会出错
//        options.setInteger(AVOptions.KEY_PREFER_FORMAT, PREFER_FORMAT_M3U8);
// 请在开始播放之前配置
//        mVideoView.setAVOptions(options);

            /**
             * 设置本地缓存目录, 目前只支持 mp4 点播, 默认值是：无
             *
             * 开启本地缓存功能后，拖动过程中遇到缓存过的数据，可以不用再次下载
             * 当整个文件都缓存完毕后，则可以支持在离线状态下播放了
             */
//        options.setString(AVOptions.KEY_CACHE_DIR, dir);
        }
        return options;
    }

    // =================================== 短视频上传 ======================================
    private PLShortVideoUploader mVideoUploadManager;// 创建视频上传对象

    public PLShortVideoUploader getPLShortVideoUploader(Context context) {

        if (mVideoUploadManager == null) {
            mVideoUploadManager = new PLShortVideoUploader(context, getUploadSetting());
        }

        return mVideoUploadManager;
    }

    private PLUploadSetting uploadSetting;          // 视频上传参数配置

    private PLUploadSetting getUploadSetting() {
        if (uploadSetting == null) {
            uploadSetting = new PLUploadSetting();
//        uploadSetting.setChunkSize(chunkSize)           //分片上传时，每片的大小，默认 2M
//                .setPutThreshhold(putthreshhold)   // 启用分片上传阀值，默认 4M
//                .setConnectTimeout(connectTimeout) // 链接超时，默认10秒
//                .setResponseTimeout(responseTimeout) // 服务器响应超时，默认60秒
//                .setZone(plUploadZone)  // 设置区域，指定不同区域的上传域名、备用域名、备用IP
//                .setHttpsEnabled(true);    //是否启用 https 上传，默认不启用
        }
        return uploadSetting;
    }
}
